<?php
/**
 * 自动计算程序相关Model
 * @author QiuXiangCheng
 * @date 2016/08/26
 */
class Application_Model_RunByAutomatic extends Model_Base {

	/**
	 * 批量计算出前一天变动的库存的可用库存
	 * @return interger 受到计算的库存数
	 */
	public static function computeStock() {

		return self::mysql()->fetchOne('CALL STOCKCOMPUTE()');
	}

	/**
	 * 批量作废特采申请表和特采需求中的状态
	 * @return interger （理论上）作废的数量
	 */
	public static function updateSpecialPurchase() {

		set_time_limit(0);
		return self::mysql()->fetchOne('CALL UPDATE_SPECIAL_PURCHASE_STATUS()');
	}

	/**
	 * 批量从决策系统的中转站取得销量数据 并将其作为日志存入p_product_sales_log表
	 * 先删除旧的本地数据 并将ID自增重置为1  CALL SET_SOLDS_DATA_INIT();
	 * 使用COMPUTE_PRODUCT_SOLDS计算三天、七天、十五天、三十天销量
	 * @return interger
	 */
	public static function insertFromDw($limit = 40000) {

		set_time_limit(0);
		// 删除销量中转日志表的数据并重新取得最新数据
		$first = 1;
		$count = 1;
		$finished = 1;
		$sql = 'SELECT goods_sn, pay_date sold_date, goods_count sold_amount, stock_code warehouse_code FROM public_dm_goods_stock_sale LIMIT ';
		$db = new Model_Base;
		self::mysql() -> query('CALL SET_SOLDS_DATA_INIT()');
		do{
			if(count($result = self::mysql('dms_db') -> fetchAll($sql . $first . ', ' . $limit)) == 0){
				break;
			}
			$db -> insertBatch(self::mysql(), 'p_product_sales_log', $result);
			$count++;
			$first += $limit;
			unset($result);
		}while(1);
		// 删除销量主表数据 并重新根据日志表计算出新的销量（三天/七天/十五天/三十天）
		self::mysql() -> query('CALL COMPUTE_FOR_SOLDS()');
		return $first;
	}

	/**
	 * 在计算销量统计之前应该先删除这些数据 并使ID自增
	 * @return interger
	 */
	public static function delSalesData() {

		return self::mysql() -> fetchOne('CALL DEL_SALES_DATA()');
	}

	/**
	 * 计算七天、十五天、三十天销量
	 * @param 计算的天数
	 * @return interger
	 */
	public static function insertAndComputeSales($day = 7) {

		set_time_limit(0);
		return self::mysql()->fetchOne('CALL COMPUTE_PRODUCT_SOLDS(' . $day . ')');
	}

	/**
	 * 生成生命周期存储过程
	 */
	public static function fetchLifeCycle() {

		set_time_limit(0);
		return self::mysql()->query('CALL COMPUTE_LIFE_CYCLE()');
	}
}